const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const User = require('../models/User');

// 生成JWT令牌
const generateToken = (id) => {
    return jwt.sign({ id }, process.env.JWT_SECRET, {
        expiresIn: '30d'
    });
};

// @路由   POST /api/auth/register
// @描述   注册新用户
router.post('/register', async (req, res) => {
    try {
        const { username, email, password } = req.body;

        // 检查用户是否已存在
        const userExists = await User.findOne({ where: { email } });
        if (userExists) {
            return res.status(400).json({ message: '用户已存在' });
        }

        // 创建新用户
        const user = await User.create({
            username,
            email,
            password
        });

        res.status(201).json({
            data: {
                id: user.id,
                username: user.username,
                email: user.email,
                token: generateToken(user.id)
            }
        });
    } catch (error) {
        res.status(500).json({
            message: '注册失败',
            error: error.message
        });
    }
});

// @路由   POST /api/auth/login
// @描述   用户登录
router.post('/login', async (req, res) => {
    try {
        const { username, password } = req.body;

        // 查找用户
        const user = await User.findOne({ where: { username } });
        if (!user) {
            return res.status(401).json({ message: '用户名或密码不正确' });
        }

        // 验证密码
        const isMatch = await user.matchPassword(password);
        if (!isMatch) {
            return res.status(401).json({ message: '用户名或密码不正确' });
        }

        res.json({
            data: {
                id: user.id,
                username: user.username,
                email: user.email,
                token: generateToken(user.id)
            }
        });
    } catch (error) {
        res.status(500).json({
            message: '登录失败',
            error: error.message
        });
    }
});

module.exports = router;
